local k = import 'ksonnet/ksonnet.beta.4/k.libsonnet';
local service = k.core.v1.service;
local servicePort = k.core.v1.service.mixin.spec.portsType;

{

  _config+:: {
    jobs+: {
      CoreDNS: 'job="coredns"',
    },
  },

  prometheus+: {
    kubeControllerManagerPrometheusDiscoveryService:
      service.new('kube-controller-manager-prometheus-discovery', { 'component': 'kube-controller-manager' }, servicePort.newNamed('http-metrics', 10252, 10252)) +
      service.mixin.metadata.withNamespace('kube-system') +
      service.mixin.metadata.withLabels({ 'k8s-app': 'kube-controller-manager' }) +
      service.mixin.spec.withClusterIp('None'),
    kubeSchedulerPrometheusDiscoveryService:
      service.new('kube-scheduler-prometheus-discovery', { 'component': 'kube-scheduler' }, servicePort.newNamed('http-metrics', 10251, 10251)) +
      service.mixin.metadata.withNamespace('kube-system') +
      service.mixin.metadata.withLabels({ 'k8s-app': 'kube-scheduler' }) +
      service.mixin.spec.withClusterIp('None'),

    serviceMonitorCoreDNS+: {
      spec+: {
        selector: {
          matchLabels: {
            'k8s-app': 'coredns',
          },
        },
      },
    },

    serviceMonitorKubeScheduler+: {
      spec+: {
        selector+: {
          matchLabels: {
            'k8s-app': 'kube-scheduler',
          },
        },
      },
    },

    serviceMonitorKubeControllerManager+: {
      spec+: {
        selector+: {
          matchLabels: {
            'k8s-app': 'kube-controller-manager',
          },
        },
      },
    },

  },
}
